#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
/*
Copyright (C) 2013 Johan Ceuppens

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#import "Stub.h"
#import "SignalCMacros.h"
#import "Slot.h"
#import "Functor.h"

__SIGCM_RETURNTYPEDECL(SIGCMReturnType, void *data; , - (void*)get; - (void) set:(void*)d;)

__SIGCM_TYPEDECL(SIGCMType, SIGCMType *data; , - (SIGCMType*)get; - (void) set:(SIGCMType*)d; )

@interface SignalCBase : NSObject 
{
	NSMutableArray *slotlist;
	NSEnumerator *iterator;
}

- (id)init;

@end

@interface SignalC0 : SignalCBase
{ 
	SIGCMReturnType *returnType;
}

- (id) SignalC0:(SIGCMReturnType*)returntype;
- (void)connect:(id)funptr;
- (SIGCMReturnType*)emit:(NSMutableArray*)a;

@end

@interface SignalC1 : SignalCBase 
{ 
	SIGCMReturnType *returnType;
	SIGCMType *argType1;	
}

- (id) SignalC1:(SIGCMReturnType*)returntype Arg1:(SIGCMType*)argtype1;
- (void)connect:(id)funptr;
- (SIGCMReturnType*)emit:(NSMutableArray*)a;

@end

@interface SignalC2 : SignalCBase 
{ 
	SIGCMReturnType *returnType;
	SIGCMType *argType1;	
	SIGCMType *argType2;	
}

- (id) SignalC1:(SIGCMReturnType*)returntype Arg1:(SIGCMType*)argtype1 Arg2:(SIGCMType*)argtype2;
- (void)connect:(id)funptr;
- (SIGCMReturnType*)emit:(SIGCMType*)arg0;

@end

// And so on until 7 arguments (if we ever need them)


